package top.jacktgq.hsp.netty.inbound_outbound_handler.v2;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ReplayingDecoder;

import java.util.List;

/**
 * @Author CandyWall
 * @Date 2020/11/13--14:27
 * @Description 自定义Long类型解码器
 */
public class MyByteToLongDecoder extends ReplayingDecoder<Void> {
    /**
     * decode()方法会被执行多次，直到确定没有新的元素被添加到list中，或者ByteBuf没有更多的可读字节为止
     * 如果list out不为空，将会将list的内容传递给下一个ChannelInboundHandler处理，该处理器的方法也会被调用多次
     *
     * @param ctx ：上下文对象
     * @param in  ：入站的ByteBuf
     * @param out ：List集合，将解码后的数据传给下一个handler
     * @throws Exception
     */
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        System.out.println("MyByteToLongDecoder2被调用");
        //因为long类型是8个字节
        /*if (in.readableBytes() >= 8) {
            out.add(in.readLong());
        }*/
        //在ReplayingDecoder不需要判断数据是否足够读取，内部会进行处理判断
        out.add(in.readLong());
    }
}
